#include <stdio.h>
#include <stdlib.h>
struct Stu {
	int ID;
	char name[20];
	int data;
	struct Stu *next;
};
typedef struct Stu LinkNode;
typedef struct Stu* LinkList;
LinkList CreatList(){
	printf("正在新建一个链表\n");
	LinkList head, p,q;
	head=p=(LinkList)malloc(sizeof(LinkNode));
	while(1){
	q=(LinkList)malloc(sizeof(LinkNode));
	q->next=NULL;
	scanf("%d %d",&q->ID,&q->data);
    if(q->ID<0)
	{
		p->next=NULL;
		break;
	}
	else
	{
		p->next=q;
		p=q;
	}
	}
	printf("新建链表完成\n");
	return head;
}

int CmpList(LinkList p,LinkList q)
{
	if(p->data<q->data)
		return 1;
	else
		return 0;
}

LinkList AddList(LinkList p1,LinkList p2)
{
	LinkList head,ptr;
	p1=p1->next;
	p2=p2->next;
	head=(LinkList)malloc(sizeof(LinkNode));
	ptr=head;
	while((p1!=NULL)&&(p2!=NULL))
	{
		if(CmpList(p1,p2))
		{
			ptr->next=p1;
			ptr=ptr->next;
			p1=p1->next;
		}
		else
		{
			ptr->next=p2;
			ptr=ptr->next;
			p2=p2->next;
		}
	}
	if(p1!=NULL)
		ptr->next=p1;
	else if(p2!=NULL)
		ptr->next=p2;
	
	return head;
}

void PrintList(LinkList head)
{
	LinkList p=head;
	printf("ID\t成绩\n");
	while(p)
	{
		printf("%d\t%d\n",p->ID,p->data);
		p=p->next;
	}
}

void FreeList(LinkList head)
{
	LinkList p=head,q;
	while(p)
	{
		q=p;
		p=p->next;
		free(q);
	}
}
//int main()
//{
//	LinkList p1,p2,p3;
//	p1=CreatList();
//	p2=CreatList();
//	p3=AddList(p1,p2);
//	PrintList(p3);
//	FreeList(p1);
//	FreeList(p2);
//	FreeList(p3);
//	return 0;
//}

void DeleteList(LinkList p)
{
	LinkList q;
	q=p->next;
	p->next=q->next;
	free(q);
}
void VisitList(LinkList head)
{
	LinkList p1,p2,p3;
	p1=head;
	while(p1){
		p2=p2->next;
		p3=p1;
		while(p2)
		{
			if(p2->ID==p3->ID)
			{
				DeleteList(p3);
				p2=p3->next;
			}
			else
			{
				p3=p2;
				p2=p2->next;
			}
			p1=p1->next;
		}
	}
}
//int main()
//{
//	LinkList head;
//	head=CreatList();
//	VisitList(head);
//	PrintList(head);
//	FreeList(head);
//	return 0;
//}


LinkList RevList(LinkList head)
{
	LinkList p,q,r;
	p=head;
	q=p->next;
	while(q)
	{
		r=q->next;
		q->next=p;
		p=q;
		q=r;
	}
	head->next=NULL;
	return p;
}
int main()
{
	LinkList p,q;
	p=CreatList();
//	PrintList(p);
	printf("翻转过后结果为\n");
	q=RevList(p);
	PrintList(q);
	FreeList(q);
	return 0;
}

